package com.amos.exception;

import com.amos.bean.IResult;

import java.text.MessageFormat;

/**
 * Copyright © 2018 嘉源锐信. All rights reserved.
 *
 * @Project: mu-exam
 * @ClassName: BizExceptionAssert
 * @Package: com.amos.exception
 * @author: zhuqb
 * @Description: 自定义业务异常断言
 * <p/>
 * 该接口异常异常信息和自定义业务断言接口, 继承这两个接口
 * 1. 获取异常的编码和信息接口，方便实现类自定义异常的编码和信息
 * 2. 获取定义异常的创建方法，并且重写创建异常实例的方法，返回对应的业务异常的实例
 * 3. 注意：此处的异常的编码和信息我们可以暂时不处理，交给子类来自定义异常编码和信息
 * @date: 2020/3/24 0024 下午 15:41
 * @Version: V1.0
 */
public interface BizExceptionAssert extends IResult, BizAssert {

    /**
     * 实现创建异常的方法， 返回自定义异常实例对象
     *
     * @param args 异常的信息
     * @return
     */
    @Override
    default BaseException newException(Object... args) {
        String msg = MessageFormat.format(this.getMsg(), args);
        return new BizException(this, args, msg);
    }

    default void throwException() {
        throwException(getMsg());
    }

    /**
     * 实现创建异常的方法， 返回自定义异常实例对象
     *
     * @param throwable 异常的信息
     * @param args      异常的消息
     * @return
     */
    @Override
    default BaseException newException(Throwable throwable, Object... args) {
        String msg = MessageFormat.format(this.getMsg(), args);
        return new BizException(this, args, msg, throwable);
    }
}
